#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector> 
using namespace std;
struct PE
{
    int u,v,w;
};
PE e[300001];
bool Function(PE a,PE b)
{
    return a.w>b.w;
}
int fa[200001];
int dep[200001];
void Init()
{
    for(int i=1;i<=100000;i++)
    {
        fa[i]=i;
    }
} 
int Find(int x)
{
    if(x==fa[x])
        return x;
    return fa[x]=Find(fa[x]);
}
vector<int> b[200001];
int n,m,q,dcnt;
int val[200001];
int f[200001][26];
int root[100001];
void Kruskal()
{
    Init();
    scanf("%d%d%d",&n,&m,&q);
    dcnt=n; 
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);
    }
    sort(e+1,e+1+m,Function);
    for(int i=1;i<=m;i++)
    {
        int fx=e[i].u;
        int fy=e[i].v;
        fx=Find(fx);
        fy=Find(fy); 
        if(fx==fy)
            continue;
        ++dcnt;
        fa[fx]=dcnt;
        fa[fy]=dcnt;
        fa[dcnt]=dcnt;
        val[dcnt]=e[i].w;
        b[dcnt].push_back(fx);
        b[dcnt].push_back(fy);
        if(fx>=n)
        {
            root[fx-n]=1;
        }
        if(fy>=n)
        {
            root[fy-n]=1;
        } 
    }
}
void DFS(int x,int ff)
{
    f[x][0]=ff;
    dep[x]=dep[ff]+1;
    for(int i=0;i<b[x].size();i++)
    {
        DFS(b[x][i],x);
    }
}
void BZ()
{
    for(int i=1;i<=25;i++)
    {
        for(int j=1;j<=dcnt;j++)
        {
            //cout<<j<<' '<<i<<'\n';
            f[j][i]=f[f[j][i-1]][i-1];
        }
    }
}
int LCA(int x,int y)
{
    if(dep[x]<dep[y])
        swap(x,y);
    for(int i=25;i>=0;i--)
    {
        if(dep[f[x][i]]>=dep[y])
            x=f[x][i];    
    }
    for(int i=25;i>=0;i--)
    {
        if(f[x][i]!=f[y][i])
        {
            x=f[x][i];
            y=f[y][i];
        }
    } 
    return f[x][0];
}
int main()
{
    Kruskal();
    for(int i=1;i<=dcnt-n;i++)
    {
        if(!root[i])
        {
            DFS(i+n,0);
        }
    }
    BZ();
    int a1,a2;
    for(int i=1;i<=q;i++)
    {
        cin>>a1>>a2;
        if(Find(a1)!=Find(a2))
        {
            cout<<-1<<'\n';
        }
        else
        {
            cout<<val[LCA(a1,a2)]<<'\n';
        }
    }
    return 0;
}